www.gusucode.com > 基于控制台的VC++ 图书管理系统-源码程序 > 基于控制台的VC++ 图书管理系统-源码程序/code/图书管理系统/Cashier.cpp

    //Download by http://www.NewXing.com
//***************************************************************************
//                              收银模块
//***************************************************************************

#include "First.h"

void Cashier(void)
{
	fstream file;
	Sale book[1000],onebook;                //储存书的信息以备显示帐单,查找时的临时变量
	char flag;                              //判断是否要购买的标志
	char isbnh[14],num[10];                 //获取输入的ISBN号和购买数
	int number,i=0,j;                       //计数
	long post;                              //得到指针的位置

    file.open("bookfile.dat",ios::in|ios::out|ios::binary);
    if(!file){
		cerr<<"书库文件打开失败。\n";
		exit(0);
	}

    cin.ignore(80,'\n');
	cerr<<"您想购买书吗?(Y/N):";
	cin>>flag;
	cin.ignore(80,'\n');
    while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N'))
    {
		cerr<<"请输入Y/N:";
		cin>>flag;
	    cin.ignore(80,'\n');
	}
	if ((flag=='n')||(flag=='N')) return;         //不想购买,返回菜单

	while((flag=='y')||(flag=='Y')) 
	{
		cerr<<"请输入书的ISBN号:";
		GetInt(13,13,isbnh);

        //在书库中寻找要销售的书

	    file.clear();                             //清除错误的状态位
	    file.seekg(0L,ios::beg);
	    file.read((char*)&onebook,sizeof(onebook));   
        while(!file.eof())
		{
			if (strcmp(onebook.getISBN(),isbnh)==0)   break;
			else 	file.read((char*)&onebook,sizeof(onebook)); 
		}
        if( file.eof() ) {
			cerr<<"\n对不起,您要购买的书不存在!\n";
			getch();
            system("cls");
            cerr<<"还想再买吗?(Y/N):";
		    cin>>flag;
		    while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N'))
			{
		        cerr<<"请输入Y/N:";
		        cin>>flag;
	            cin.ignore(80,'\n');
			}
		}
		else {
			book[i]=onebook;
	        cerr<<"请输入销售书的数量:";
		    GetInt(10,0,num);
            number=atoi(num);

		    if (book[i].getQty()-number<0)
			{
		        cerr<<"没有足够的书!";
				getch();
                system("cls");
                cerr<<"还想再买吗?(Y/N):";
		        cin>>flag;
		        while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N'))
				{
		            cerr<<"请输入Y/N:";
		            cin>>flag;
	                cin.ignore(80,'\n');
				}
			}
			else{
					//设置要购买的书的信息
					post=file.tellg();             //得到读指针的位置
					book[i].setQtySold(number);
					book[i].setTax();
	  				book[i].setSubTotal();
					book[i].setTotal();
					book[i].setQty(book[i].getQty()-number);
					file.seekp(post-sizeof(book[i]),ios::beg);
					file.write((char*)&book[i],sizeof(book[i]));  //写入文件
					i++;

					system("cls");
					cerr<<"还想再买吗?(Y/N):";
					cin>>flag;
					while((flag!='y')&&(flag!='Y')&&(flag!='n')&&(flag!='N'))
					{
						cerr<<"请输入Y/N:";
						cin>>flag;
						cin.ignore(80,'\n');
					}
				}
		}
	}

	    //打印帐单

	    system("cls");
	    cerr<<"\t\t\t前台销售模块\n\n";

	    char date[30];
	    _strdate(date);
	    cerr<<" 日期:"<<date<<endl;//获取系统日期

	    char time[30];
     	_strtime(time);
    	cerr<<" 时间:"<<time<<endl;//获取系统时间

    	cerr<<setiosflags(ios::left)<<setw(6)<<"数量";
    	cerr<<setiosflags(ios::left)<<setw(15)<<"ISBN号";
    	cerr<<setw(25)<<"书名";
    	cerr<<setw(15)<<"单价";
    	cerr<<setw(15)<<"金额"<<endl;;
    	for(j=0;j<i;j++)
		{
	    	cerr<<setiosflags(ios::left)<<setw(6)<<book[j].getQtySold();
	    	cerr<<setiosflags(ios::left)<<setw(15)<<book[j].getISBN();
            cerr<<setiosflags(ios::left)<<setw(25)<<book[j].getTitle();
	    	cerr<<setiosflags(ios::left)<<setw(15)<<book[j].getRetail();
	    	cerr<<setiosflags(ios::left)<<setw(15)<<book[j].getSubTotal();
	    	cerr<<endl;
		}

        for(i=0;i<80;i++)                       //打印"----"
    	cerr<<"-";
    	cerr<<endl;

        cerr.precision(2);
    	cerr.setf(ios::fixed|ios::showpoint);

    	cerr<<"\t\t销售合计: RMB "<<book[0].getTotal()/1.06<<endl;
        cerr<<"\t\t零售税:   RMB "<<book[0].getTotal()/1.06*0.06<<endl;
        cerr<<"\t\t应付总额: RMB "<<book[0].getTotal()<<endl;
    	cerr<<"\n\n";
    	cerr<<"\t\t\t谢谢光临!\n";
		getch();
		book[0].clearTotal();                     //将总额清零

    	file.flush();
    	file.close();
}